import BaseController from "../../base/baseController.js";
import OrderSearchController from "./orderSearchController.js";
import OrderNavigationController from "./orderNavigationController.js";
import OrderListController from "./orderListController.js";

/**
 * @description 订单控制器
 * @class {OrderController}
 * @extends {BaseController} 基础控制器
 * @author hhx
 * @date 2024-12-2 22:12
 * @version 0.1.2
 */
export default class OrderController extends BaseController {

    /**
     * @description 订单搜索控制器
     * @private
     * @type {OrderSearchController}
     */
    _orderSearchController = null;

    /**
     * @description 订单导航控制器
     * @private
     * @type {OrderNavigationController}
     */
    _orderNavigationController = null;

    /**
     * @description 订单列表控制器
     * @private
     * @type {OrderListController}
     */
    _orderListController = null;

    /**
     * @description 订单控制器 构造函数
     * @public
     * @constructor
     * @param props {Object} 配置对象
     */
    constructor(props) {
        super(props);
    }

    /**
     * @description 实例化 订单控制器
     * @public
     * @static
     * @param props {object} 配置对象
     * @returns {OrderController|*} 订单控制器
     */
    static instance(props = {}) {
        let instance = new OrderController(props);
        instance.init(props);
        return instance;
    }

    //=========================== 内部成员 ===============================

    /**
     * @description 获取 订单搜索控制器
     * @property
     * @protected
     * @return {OrderSearchController} 订单搜索控制器
     */
    get orderSearchController() {
        return this._orderSearchController;
    }

    /**
     * @description 设置 订单搜索控制器
     * @property
     * @protected
     * @param value {OrderSearchController} 订单搜索控制器
     */
    set orderSearchController(value) {
        this._orderSearchController = value;
    }

    /**
     * @description 获取 订单导航控制器
     * @property
     * @protected
     * @return {OrderNavigationController} 订单导航控制器
     */
    get orderNavigationController() {
        return this._orderNavigationController;
    }


    /**
     * @description 获取 订单导航控制器
     * @property
     * @protected
     * @param value {OrderNavigationController} 订单导航控制器
     */
    set orderNavigationController(value) {
        this._orderNavigationController = value;
    }

    /**
     * @description 获取 订单列表控制器
     * @property
     * @protected
     * @return {OrderListController} 订单列表控制器
     */
    get orderListController() {
        return this._orderListController;
    }

    /**
     * @description 获取 订单列表控制器
     * @property
     * @protected
     * @param value {OrderListController} 订单列表控制器
     */
    set orderListController(value) {
        this._orderListController = value;
    }

    //=========================== 成员方法 ===============================

    /**
     * @description 获取 订单搜索控制器
     * @public
     * @return {OrderSearchController} 订单搜索控制器
     */
    getOrderSearchController() {
        return this.orderSearchController;
    }

    /**
     * @description  设置 订单搜索控制器
     * @public
     * @param value {OrderSearchController} 订单搜索控制器
     */
    setOrderSearchController(value) {
        this.orderSearchController = value;
    }

    /**
     * @description 判断订单搜索控制器是否存在
     * @public
     * @return {Boolean} true 是 false 否
     */
    hasOrderSearchController() {
        return this.isNotNull(this.orderSearchController);
    }

    /**
     * @description 获取 订单导航控制器
     * @public
     * @return {OrderNavigationController} 订单导航控制器
     */
    getOrderNavigationController() {
        return this.orderNavigationController;
    }

    /**
     * @description 设置 订单导航控制器
     * @public
     * @param value {OrderNavigationController} 订单导航控制器
     */
    setOrderNavigationController(value) {
        this.orderNavigationController = value;
    }

    /**
     * @description 判断订单导航控制器是否存在
     * @public
     * @return {Boolean} true 是 false 否
     */
    hasOrderNavigationController() {
        return this.isNotNull(this.orderNavigationController);
    }

    /**
     * @description 获取 订单列表控制器
     * @public
     * @return {OrderListController} 订单列表控制器
     */
    getOrderListController() {
        return this.orderListController;
    }

    /**
     * @description 设置 订单列表控制器
     * @public
     * @return {OrderListController} 订单列表控制器
     */
    setOrderListController(value) {
        this.orderListController = value;
    }

    /**
     * @description 判断订单列表控制器是否存在
     * @public
     * @return {Boolean} true 是 false 否
     */
    hasOrderListController() {
        return this.isNotNull(this.orderListController);
    }

    //=========================== 基础属性 ===============================

    //=========================== 属性方法 ===============================

    //=========================== 接口方法 ===============================

    //=========================== 创建方法 ===============================

    /**
     * @description 创建订单搜索控制器
     * @protected
     * @returns {OrderSearchController} 订单搜索控制器
     */
    createOrderSearchController() {
        return OrderSearchController.instance();
    }

    /**
     * @description 创建订单导航控制器
     * @protected
     * @returns {OrderNavigationController} 订单导航控制器
     */
    createOrderNavigationController() {
        return OrderNavigationController.instance();
    }

    /**
     * @description 创建订单列表控制器
     * @protected
     * @returns {OrderListController} 订单列表控制器
     */
    createOrderListController() {
        return OrderListController.instance();
    }

    //=========================== 构建方法 ===============================

    //=========================== 重载方法 ===============================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {

        super.init(props);

        //初始化订单搜索控制器
        this.initOrderSearchController();

        //初始化订单导航控制器
        this.initNavigationController();

        //初始化订单列表控制器
        this.initOrderListController();


    }

    //=========================== 内部方法 ===============================

    /**
     * @description 初始化订单搜索控制器
     * @protected
     */
    initOrderSearchController() {
        let orderSearchController = this.createOrderSearchController();
        this.setOrderSearchController(orderSearchController);
    }

    /**
     * @description 初始化订单导航控制器
     * @protected
     */
    initNavigationController() {
        let navigationController = this.createOrderNavigationController();
        this.setOrderNavigationController(navigationController);
    }

    /**
     * @description 初始化订单导航控制器
     * @protected
     */
    initOrderListController() {
        let orderListController = this.createOrderListController();
        this.setOrderListController(orderListController);
    }

    //=========================== 控制方法 ===============================

    //=========================== 事件订阅 ===============================

    //=========================== 事件触发 ===============================

    //=========================== 处理函数 ===============================

}
